// 发现node的this指向的是{}对象，我来测试到底指向的是那个对象
// 'use strict'
const name = 'test1';
const age = 18;
// module.exports = {
//   name,
//   age: age
// }
console.log(this)

function test() {
  console.log(this)
}
test();

exports.myname = name;
exports.myage = age;

console.log(this);
// 好了测试成功了，这个this指向的就是模块对象导出的内容。
// 但是只限于exports导出的对象，而不是module.exports导出的对象

module.exports.name = "test1";
module.exports.age = 18;
// 这个module.exports和exports指向的对象是同一个，但是node在寻找真正的这个导出对象的时候
// 是通过module.exports找的

module.exports = {
  name: 'test1',
  age: 18,
  test: test,
}
// 这种情况是module.exports指向了一个新的对象，所以node在寻找导出对象的时候寻找的就是这个对象
// 而不是exports指向的对象

/* 注意 */
// require导出的是一个对象的引用，而不是对象的复制拷贝
// 这就会导致一个问题，就是可以在导出的地方修改这个对象的值，这个不是一个好的习惯

// 好了，了解到了这个东西，以后在介绍this的指向的时候，就有的说了
// 关于this的指向的问题
/* 
 * zhis的指向有两种情况，一种就是严格模式下的指向，一种是非严格模式下的指向
 * 非严格模式下的指向一般是全局对象，在浏览器中指向的是window对象，在node中指向的是global对象
 * 在严格模式下，都是指向的undefined。需要注意的是在node中由于涉及到module的导入和导出，所以在node中的this指向还有点复杂
 * 除了这种全局模式下的指向，this的指向还和this的绑定方式有关
 * 比如
 * 1. 显示绑定，比如apply，call，bind这种会指向被绑定的对象上
 * 2. 隐式绑定，这种一般会指向调用的对象上
 * 3. 默认绑定，这最一般会指向全局对象上面，如果在严格模式下会指向undefined，非严格模式下会指向全局对象
 * 4. new绑定，这种一般会指向新创建的对象上
 * 
*/